'''
    Python中的库分为Python标准库(Standard Library)和第三方库(Third-Party Library),其中标准库会随Python解释器一同安装,可在程序中直接
导入和使用;第三方库是有Python使用者编写和分享的库,在使用前需要单独安装
'''

'''
10.2.1 模块的构建与使用
    Python模块本质上是一个包含Python代码片段的.py文件,模块名就是文件名.假设现有文件 test.py,该文件包含如下代码:
    
def add(a,b)
    return a + b
    
    那么test.py就是一个Python模块.
    利用import语句或者from...import...语句在当前程序中导入模块,便可在当前程序中使用模块内包含的代码.例如在当前程序中使用test模块中定义的
add()函数,示例代码如下:

import test
result = test.add(11,22)
print(result)

    运行程序,结果如下:

33

    模块技能被导入其他程序使用,也可以作为脚本直接使用,实际开发中,为了保证模块实现的功能与预期相符,开发人员统称会在模块文件中添加一些测试代码,
对模块中的功能代码进行测试.以test.py文件为例,示例如下:

# 功能代码
def add(a,b)
    return a+b
# 测试代码
result = add(11,22)
print(f'功能测试{result}')

    将以上脚本文件直接执行,便可利用测试代码测试add()函数的功能,但此时会出现一个问题:在其他文件中导入test模块,没模块中的测试代码会在其他文件执行时
一并执行,例如导入test模块,使用该模块中的add()函数,代码如下:

import test
result = test.add(11,22)
print(result)

    运行程序,结果如下:

功能测试33    # 模块中测试代码的运行结果
33

    为解决以上问题,Python为.py文件定义了一个名字属性 __name__ .在文件中对__name__属性的取值进行判断:当__name__取值为"__main__"时,说明
.py文件以脚本形式执行;否则说明.py文件作为模块被导入了其他程序.根据此原理对模块进行修改,示例代码如下:

# 功能代码
def add(a.b)
    return a+b
# 测试代码
if __name__ == '__main__':
    result = add(22,33)
    print('功能测试',result)

    经过以上修改以后,再次导入test模块,调用其中的add()函数,代码运行结果如下:
33
'''

'''
10.2.2 包的构建与导入
    将模块放入一个文件夹,并在该文件夹中创建__init__.py文件,就构建了一个Python包.简单地说,Python中的包就是以目录形式组织起来的,具有层级关系的
多个模块.Python包中可以包含子包.
    导入语句如下:
    
import package.package_a.module_a
from package.package_a import module_a
'''